package equipments;

import java.sql.Statement;

import tools.Visitor;

/**
 * This interface regroups all the item that can be equip by a Character.
 * Its also provide sevelerall method to get information about an Items.
 * @author Baptiste Legrand & Benjamin Orman
 * @version 2.0
 */
public interface Items {
  /**
   * Initialize the Items according to the id given in parameters.
   * <b>Note :</b> This method call the <i>initItem</i> method, so be aware of
   * not use the second method after using init(), It's already done.
   * @param id - The unique identifier of the Items
   */
  public void init(String id);
  /**
   * Return the level of the item.
   * @return int - The level of the item
   */
	public int getLevel();
	/**
	 * Return the name of the item in the current language of the program.
	 * @return String - Name of the item.
	 */
	public String getName();
	/**
	 * Return the number of manastone that can be equiped on this item.
	 * @return int - The manastone number equipable.
	 */
	public int getNbManastone();
	/**
	 * Returns true if the item contains divine slot.
	 * @return True if the item contains divine slot, else false.
	 */
	public boolean hasDivineSlot();
	/**
	 * Returns the number of bonus attributs.
	 * @return int - The number of bonus attributs.
	 */
	public int getNbBonusAttr();
	/**
	 * This method is called by init() to complete the initialization of the
	 * item according to the item id and the database.
	 * @param transmission - The statement used to communicate with the database.
	 */
	public void initItem(Statement transmission);
	/**
	 * This method allows a class which implements this interface to be 
	 * visited by a Visitor object.
	 * @param visitor - The Visitor object.
	 */
	public void accept(Visitor visitor);
	/**
   * This method allows a class which implements this interface to be 
   * remove bonus values according to the visitor given in parameter.
	 * @param visitor - The Visitor object.
	 */
	public void acceptBonusRemoval(Visitor visitor);
	/**
	 * Returns the unique identifier (get from the database) of the Items.
	 * @return int - The id of this item.
	 */
	public int getID();
	/**
	 * This method updates the item name according to the Language used in the
	 * program.
	 */
	public void updateName();
}
